<<<(main)#if !defined($(base_name)_C_API_H_INCLUDED_H)
#define $(base_name)_C_API_H_INCLUDED_H

#include "$(lower_base_name)_c_api_i.h"
#include "AsyncCall\DispUnit.h"

#ifndef CLIENTCALL_TIMEOUT
#define CLIENTCALL_TIMEOUT 10
#endif

class McDisp_$(service_name)_c : public IResponse_$(service_name)_c, public IDispUnitImpl<IRequest_$(service_name)_c, IResponse_$(service_name)_c>
{
	virtual MsDispUnitKey get_disp_unit_key(void);
	virtual void add_cmd_event_handler(void);

<<<(methods,client_side&have_ack)	virtual void $(method_name)_c_exception(long lngSerialNo, const map<string, string>& context, long exceptionNo, const string& reason);
	virtual void $(method_name)_c_ack(long lngSerialNo<<<(out_args), $(const_arg_ref_type) $(arg_name)>>>, const map<string, string>& context = map<string, string>());
<<<(exceptions)	virtual void $(method_name)_c_ack_exception_$(exception_type)(long lngSerialNo<<<(exception_members), $(const_arg_ref_type) $(arg_name)>>>, const map<string, string>& context = map<string, string>());
>>> >>>
<<<(methods,!client_side&have_ack)<<<(in_args)<<<(comments,have_element)
	//$(arg_name)>>><<<(comments):$(comment)>>>>>>
	virtual long $(method_name)_s(const string& string_param, long long_param, const MsAddr& addr<<<(in_args), $(const_arg_ref_type) $(arg_name)>>>, I_$(method_name)_s* ack = NULL, long tv = CLIENTCALL_TIMEOUT, const map<string, string>& context = map<string, string>());>>>
<<<(methods,!client_side&!have_ack)<<<(in_args)<<<(comments,have_element)
	//$(arg_name)>>><<<(comments):$(comment)>>>>>>
	virtual long fire_$(method_name)_s(const set<MsAddr>& destAddrs<<<(in_args), $(const_arg_ref_type) $(arg_name)$(arg_name)>>>, const map<string, string>& context = map<string, string>());>>>
public:
	McDisp_$(service_name)_c(IRequest_$(service_name)_c* pCmd, bool bDeleteServe);
};

#endif // !defined($(base_name)_C_API_H_INCLUDED_H)>>>